33e7d09f5fd508343dd75aae6c3e14ad11c3b15a,community/kernel/src/main/java/org/neo4j/kernel/impl/nioneo/store/PropertyStore.java,PropertyStore,encodeValue,#PropertyBlock#number#Object#,560
Before Change
block.addValueRecord( valueRecord );
}
}
else if ( value instanceof Integer ) block.setSingleBlock( bits32WithKeyAndType( keyId, PropertyType.INT ).put( ((Integer)value).intValue() ).getLongs()[0] );
else if ( value instanceof Boolean ) block.setSingleBlock( bits32WithKeyAndType( keyId, PropertyType.BOOL ).put( ((Boolean)value).booleanValue() ? 1 : 0 ).getLongs()[0] );
else if ( value instanceof Float ) block.setSingleBlock( bits32WithKeyAndType( keyId, PropertyType.FLOAT ).put( Float.floatToRawIntBits( ((Float) value).floatValue() ) ).getLongs()[0] );
else if ( value instanceof Long )
{
if ( ShortArray.LONG.getRequiredBits( value ) <= 35 )
{ // We only need one block for this value
block.setValueBlocks( bits32WithKeyAndType( keyId, PropertyType.LONG ).put( (byte)1, 1 ).put( ((Long)value).longValue(), 35 ).getLongs() );
}
else
{ // We need two blocks for this value
After Change
return arrayPropertyStore.allocateRecords( valueBlockId, array );
}
public void encodeValue( PropertyBlock block, int keyId, Object value )
{
// try
// {
if ( value instanceof String )
{
String string = (String) value;
if ( LongerShortString.encode( keyId, string, block,
PropertyType.getPayloadSize() ) ) return;
Bits bits = bits32WithKeyAndType( keyId, PropertyType.STRING );
long stringBlockId = nextStringBlockId();
bits.put( stringBlockId, 36 );
block.setSingleBlock( bits.getLongs()[0] );
byte[] encodedString = getBestSuitedEncoding( string );
Collection<DynamicRecord> valueRecords = allocateStringRecords( stringBlockId, encodedString );
for ( DynamicRecord valueRecord : valueRecords )
{
valueRecord.setType( PropertyType.STRING.intValue() );
block.addValueRecord( valueRecord );
}
}
else if ( value instanceof Integer ) setSingleBlockValue( block, keyId, PropertyType.INT, ((Integer)value).longValue() );
else if ( value instanceof Boolean ) setSingleBlockValue( block, keyId, PropertyType.BOOL, (((Boolean)value).booleanValue()?1L:0L) );
else if ( value instanceof Float ) setSingleBlockValue( block, keyId, PropertyType.FLOAT, (long)Float.floatToRawIntBits( ((Float) value).floatValue() ) );
else if ( value instanceof Long )
{
long keyAndType = keyId | (((long)PropertyType.LONG.intValue()) << 24);
if ( ShortArray.LONG.getRequiredBits( value ) <= 35 )
{ // We only need one block for this value, special layout compared to, say, an integer
block.setSingleBlock( keyAndType | (1L << 28) | (((Long)value).longValue() << 29) );
}
else
{ // We need two blocks for this value
block.setValueBlocks( new long[] {keyAndType, ((Long)value).longValue()} );
}
}
else if ( value instanceof Double ) block.setValueBlocks( new long[] { keyId | (((long)PropertyType.DOUBLE.intValue()) << 24), Double.doubleToRawLongBits( ((Double)value).doubleValue() ) } );